package com.yunpeng.aidevice.biz.service;

import com.alibaba.fastjson.JSONArray;
import com.yunpeng.common.dto.Result;
import com.yunpeng.aidevice.common.dto.save.DeviceNoticeParameterSaveDTO;
import com.yunpeng.aidevice.common.dto.save.NoticeUserSaveDTO;
import com.yunpeng.aidevice.common.vo.device.DeviceNoticeUserConfigVO;
import com.yunpeng.aidevice.dao.model.entity.DeviceDO;
import com.yunpeng.aidevice.dao.model.record.RecordDO;

import java.util.List;

/**
 * INoticeBizService 通知业务服务
 *
 * @author : Moore(hemw)
 * @date : 2020-04-28
 */
public interface INoticeBizService {
    /**
     * 规则集合下拉菜单
     *
     * @return
     */
    Result<JSONArray> ruleDropdownList();

    /**
     * 设备规则配置参数 下拉菜单
     *
     * @param scriptCodes 规则代码集合
     * @param deviceCode  设备代码
     * @return
     */
    Result<JSONArray> ruleParameterDropdownList(List<String> scriptCodes, String deviceCode);

    /**
     * 删除设备的提醒用户设置
     *
     * @param scriptCode 脚本代码
     * @param userCode   用户代码
     * @param deviceCode 设备代码
     * @return
     */
    Result<Void> removeNoticeToUser(String scriptCode, String userCode, String deviceCode);

    /**
     * 设备提醒用户列表
     *
     * @param deviceCode 设备代码
     * @return
     */
    Result<List<DeviceNoticeUserConfigVO>> deviceNoticeUserList(String deviceCode);

    /**
     * 新增提醒用户
     *
     * @param noticeUserSaveDTO 提醒用户信息
     * @param operatorCode      操作人代码
     * @return
     */
    Result<Void> addNoticeToUser(NoticeUserSaveDTO noticeUserSaveDTO, String operatorCode);

    /**
     * 配置设备报警参数
     *
     * @param deviceNoticeParameterSaveDTO
     * @param operatorCode
     * @return
     */
    Result<Void> configDeviceNoticeParameters(DeviceNoticeParameterSaveDTO deviceNoticeParameterSaveDTO, String operatorCode);

    /**
     * 1.邮件名称：
     * 温度异常提醒-设备名称－设备地址
     * <p>
     * 邮件内容：
     * 部门名称：[部门名称]
     * 异常人员：[人员名称]
     * 设备名称：[设备名称]
     * 设备地址：[设备地址]
     * 检测时间：[检测时间]
     *
     * @param deviceDO
     * @param recordDO
     * @return
     */
    Boolean noticeToUsers(DeviceDO deviceDO, RecordDO recordDO);
}
